Google Ads Transparency Scraper
Pricing
from $12.00 / 1,000 results
Google Ads Transparency Scraper
Designed for marketers, researchers, and business intelligence teams, this efficient tool scans a provided list of websites to determine which ones have ever run Google Ads—whether in the past or currently—by leveraging data from the Google Ads Transparency Center.
Pricing
from $12.00 / 1,000 results
Rating
0.0
(0)
Developer
Alkausari M
Maintained by CommunityActor stats
2
Bookmarked
189
Total users
53
Monthly active users
1.1 hours
Issues response
7 days ago
Last modified
Categories
Share
Overview
This Apify Actor quickly checks a list of website domains to determine whether they have ever run Google Ads — either currently active or at any point in the past.
It uses publicly available data from the official Google Ads Transparency Center
→ https://adstransparency.google.com/
Primary use cases
- Competitor advertising intelligence
- Lead generation for digital marketing agencies
- Market & trend analysis
- High-volume domain screening (100,000+ domains possible)
Performance
- Reliable batches of up to 1,000 domains per run
- Scales easily to very large lists via multiple executions
- Built with Playwright for stable browser automation
- Residential proxy support included (strongly recommended for >200 domains)
Key Features
- Batch processing of 1,000 domains per run
- Clear yes/no result + optional metadata per domain
- Ad count, last shown date, ad format, and direct link per domain
- Structured output (JSON, CSV, Excel compatible)
- Automatic retries and error handling
- Optional Apify residential proxies for high success rate
- Compliant with public data access guidelines
How to Run the Actor
- Go to your Apify Console → find or open this Actor
- Click Try for free or Run
- Switch to the Input tab
- Paste your JSON configuration (see examples below)
- Click Start
- Monitor progress in the run log
- When finished → go to Storage → Dataset → download results
Input Configuration
Provide input as a JSON object or paste a list of domains.
Minimal working example
{"domains": ["apple.com","tesla.com","shopify.com","kars4kids.org","columbusfoundation.org"]}
Region
By default the Actor reports ads from Anywhere (all regions combined). To check a specific country, set the region field — it's a dropdown of every region Google's Transparency Center supports, selected by name in the Console:
{"domains": ["apple.com"],"region": "US"}
Ad counts, the last-shown date, and the ad format can differ from one region to another, so pick the market you care about. Leave it as anywhere for a global view.
adsPageLoadDelay Tuning Guide
If ad details such as last run date or format are missing from the output, the results page may not have finished rendering before the scraper read it. Increase this value until data is consistently extracted.
| Connection Speed | Recommended Value |
|---|---|
| Fast (Less Costly) | 1500 – 2000 ms |
| Slow (Stable) | 2000 – 3500 ms |
| Very Slow (Higher Cost) | 3500 – 5000 ms |
Domain Input Notes
- Domains are case-insensitive —
Kars4kids.Organdkars4kids.orgare treated identically. - Leading
www.is stripped before matching, sowww.example.comandexample.comresolve to the same entry. - Duplicate domains in the list are processed individually and will produce duplicate rows in the output. Deduplicate your input list beforehand if needed.
- If Google's autocomplete returns no suggestions for a domain, or no suggestion exactly matches the input domain, the domain is recorded as
ads_ever: "No"and processing moves on.
Output
Results are saved to the default Apify Dataset, one record per domain. The dataset can be exported as JSON, CSV, Excel, or XML from the Apify Console.
Output preview (dataset view)
| Domain | Ran Ads? | Ad Count | Last Shown | Ad Format | Ads Page | Error |
|---|---|---|---|---|---|---|
| apple.com | Yes | ~70K | Jun 9, 2026 | Text | …/advertiser/AR1836…?region=US | null |
| tesla.com | Yes | ~2K | Jun 9, 2026 | Video | …/advertiser/AR1782…?region=US | null |
| shopify.com | Yes | ~10K | Jun 9, 2026 | Text | …/advertiser/AR0162…?region=US | null |
| kars4kids.org | Yes | ~500 | Jun 9, 2026 | Text | …/advertiser/AR1546…?region=US | null |
| columbusfoundation.org | Yes | 10 | Jun 9, 2026 | Text | …/advertiser/AR1796…?region=US | null |
Ads Pagelinks are shortened here for readability — the dataset stores the full URLs.
Output (JSON view)
[{"domain": "apple.com","ads_ever": "Yes","adsCount": "~300K","date_of_last_running": "Apr 24, 2026","type_of_ad": "Video","ads_link": "https://adstransparency.google.com/advertiser/AR12345678/creative/CR98765432?authuser=0®ion=anywhere","error": null},{"domain": "unknowndomain.com","ads_ever": "No","adsCount": null,"date_of_last_running": null,"type_of_ad": null,"ads_link": null,"error": null}]
Data Fields
| Field | Description |
|---|---|
domain | The input domain that was checked. |
ads_ever | "Yes" if the domain has run Google Ads, "No" if confirmed none, null if the run errored. |
adsCount | Ad count as shown on the site (e.g. "~300K", "1,432"). null if none. |
date_of_last_running | When the most recent ad was last shown (e.g. "Apr 24, 2026"). |
type_of_ad | Format of the most recent ad (e.g. "Video", "Image", "Text"). |
ads_link | Direct URL to the domain's ad detail on the Transparency Center. |
error | Error message if the domain could not be scraped, otherwise null. |
Processing Large Lists
A single run processes its domains one at a time — this keeps the scraper stable and avoids triggering Google's CAPTCHA. To check a very large list faster, don't put everything in one run; instead split the work across multiple runs that execute in parallel using Apify Tasks. No code required.
How to set it up
- Split your list into batches — e.g. 10,000 domains into 10 batches of 1,000 (smaller batches finish sooner and are easier to retry).
- Create a Task per batch — on the Actor page click Create task (or Actor → ⋮ → Create task). In each task's Input tab, paste that batch's domains, pick the
region, and Save. - Start them together — open each task and click Start (or start them via the API/Console). They run as independent, concurrent runs, so 10 tasks of 1,000 finish in roughly the time one batch of 1,000 takes.
- Collect the results — each run writes to its own dataset. Download and merge them, or use the API to push all runs into a single named dataset.
Tips
- Test first. Run one task with a small
maxDomainsPerRunto gauge speed and cost before launching all batches. - Mind your plan's limits. How many runs execute at once is bounded by your Apify plan's max concurrent runs and available memory. Start with a few parallel tasks and scale up.
- Schedule recurring work. For an ongoing workload (e.g. 10,000/month), give each task a Schedule (daily/weekly) so batches run automatically without manual starts.
- Keep batches reliably sized. A few hundred to ~1,000 domains per task is a good balance between throughput and run stability.
Pricing / Cost Estimation
This Actor uses Playwright with residential proxies, which means each domain costs approximately 1–3 compute units depending on page load time. A run of 100 domains typically costs $0.50–$1.50.
Use maxDomainsPerRun to test with a small batch first and estimate costs before processing a large list.
FAQ, Disclaimers, and Support
Is this legal?
This Actor scrapes publicly available data from Google Ads Transparency Center, which is a public accountability tool provided by Google. No authentication is required, and no private data is accessed. Always comply with Google's Terms of Service and applicable laws in your jurisdiction.
Why is a domain showing "No" when I know it runs ads?
The Google Ads Transparency Center only shows ads that meet a minimum impressions threshold, and there can be a delay before new ads appear. Try increasing adsPageLoadDelay or running again later.
Why do I need residential proxies?
Google blocks requests from datacenter IPs on this site. Residential proxies make requests look like they come from real users. Apify Residential proxies are included and pre-configured by default.
Found a bug or need a custom solution?
Open an issue in the ../../issues or contact the author. Custom solutions for large-scale or enterprise use cases are available on request.